package com.wtpaint.leetcode.查找表;

import java.util.HashSet;
import java.util.Set;

public class IsHappy202 {

    //快乐数，实现思路：当一个数不断被操作时，如果出现重复的结果，说明这个结果再次操作肯定还会出现重复，这样就是一个死循环
    //这样的话，这个数字就不是快乐的数

    public static boolean isHappy(int n) {
        //定义一个记录表
        Set<Integer> record = new HashSet<>();
        //循环退出条件：n == 1 或者 记录表中出现了重复的数据
        while (n != 1 && !record.contains(n)) {
            //将数据加入记录表
            record.add(n);
            //操作该数据
            n = operation(n);
        }
        //最后结果是否是1，是1 就是快乐数
        return n == 1;

    }

    //将数据进行题目给出的条件操作
    private static int operation(int n) {
        int res = 0;
        while (n > 0) {
            res += (n % 10) * (n % 10);
            n /= 10;
        }
        return res;
    }


    public static void main(String[] args) {
        isHappy(4);
    }

}
